package com.jrx.anytxn.param.service.ntfs.impl;

import com.jrx.anytxn.common.uitl.StringUtils;
import com.jrx.anytxn.param.service.ntfs.ICreateTskdFileSampleSimple;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import tech.nfts.invoke.entity.yaml.NftsTskdFileData;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * 联盟NFTS 文件传输服务类
 */
@Service
public class CreateTskdFileSampleSimpleImpl implements ICreateTskdFileSampleSimple {

    private static final Logger logger = LoggerFactory.getLogger(CreateTskdFileSampleSimpleImpl.class);

    @Override
    public void initNfsTransFile(String sendFileDir, String tskdScanDir, String destSubPath, String bizFtypeCode, String bizOrgCode, String bizDate, String descMksubFlag) throws Exception {
        String trsTaskLchDate = new SimpleDateFormat("yyyyMMdd").format(new Date());  // 文件传输任务发起日期
        String trsTaskId      = UUID.randomUUID().toString();                         // 文件传输任务ID

        NftsTskdFileData nftsTskdFileData = new NftsTskdFileData(true);

        nftsTskdFileData.TASK_BASE.trs_task_lch_date       = trsTaskLchDate;          // 文件传输任务发起日期
        nftsTskdFileData.TASK_BASE.trs_task_id             = trsTaskId;               // 文件传输任务ID
        // 可选项
        // nftsTskdFileData.TASK_BASE.orig_lgc_snode_id       = "svr_sd";                // 起点逻辑服务端节点ID（当客户端节点从属于多个服务端节点时, 必须显式指定!!!）
        // 必输项
        nftsTskdFileData.TASK_BASE.biz_org_code            = bizOrgCode;              // 业务组织代码
        nftsTskdFileData.TASK_BASE.biz_ftype_code          = bizFtypeCode;            // 业务文件类型代码
        // 必输项
        nftsTskdFileData.TASK_BASE.orig_cnode_snd_path     = sendFileDir;             // 起点客户端节点文件发送路径
        // 可选项
        nftsTskdFileData.TASK_BASE.dest_cnode_rcv_sub_path = destSubPath;             // 终点客户端节点文件接收相对子路径
        //终点客户端节点创建相对子路径标记接收节点根据此标记决定是否按照dest_cnode_rcv_sub_path字段内容创建接收相对子路径
        //0：不创建
        //1：创建
        nftsTskdFileData.TASK_BASE.dest_mksub_flag = descMksubFlag;
        if(!StringUtils.isEmpty(bizDate)){
            nftsTskdFileData.TASK_BASE.biz_date=bizDate;//业务日期  动态目录根据这个生成
        }
        // -- TASK_DETL_DATA --------------------------------------------------------------------------------------------
        File[] filesArray = new File(sendFileDir).listFiles();
        if(filesArray!=null&&filesArray.length>0){
            for(int i=0; i< filesArray.length; i++) {
                String fileName = filesArray[i].getName();
                Long   fileSize = filesArray[i].length();

                nftsTskdFileData.addDetlRow();
                nftsTskdFileData.setDetlColumnVal(i, NftsTskdFileData.DetlColumn.FILE_NAME, fileName);
                nftsTskdFileData.setDetlColumnVal(i, NftsTskdFileData.DetlColumn.FILE_SIZE, fileSize.toString());
            }
        }else{
            logger.error("目录无文件");
            throw new RuntimeException("目录无文件");
        }
        // -- 输出到文件 ------------------------------------------------------------------------------------------------
        nftsTskdFileData.writeToFile(tskdScanDir);
    }
}
